<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/9/22
 * Time: 21:08
 * 抽奖大转盘
 */

namespace app\share\model;


class TurnTable
{
    /**
     * 计算中奖概率
     * 奖品数组
     * id => 奖品等级(奖品id)， name => 奖品名称, v => 奖品权重
     * array('id'=>6,'name'=>'谢谢参与','v'=>0);
     * array('id'=>1,'name'=>'特等奖','v'=>1);
     * array('id'=>2,'name'=>'一等奖','v'=>1),
     * array('id'=>3,'name'=>'二等奖','v'=>0)
     * 具体实现,需要根据业务变化,比如利用静态属性限制抽奖总次数,中奖总次数,单人每人抽奖次数等,以及奖品抽完之后,权重变成0
     *
     * @proArr   array    奖品数组,必须包括奖品id和奖品权重
     * @return   string   中奖id
     */
    public function getRand($data){
        $result = '';
        //奖品等级权重数组
        $arr = [];
        foreach ($data as $key => $val) {
            $arr[$val['id']] = $val['v'];
        }
        //概率数组的总概率精度
        $proSum = array_sum($arr);
        if($proSum == FALSE)
        {
            return ['code'=>-3001, 'msg'=>"奖品权重不能都为空"];
        }
        //概率数组循环
        foreach ($arr as $key => $proCur) {
            $randNum = mt_rand(1, $proSum);  //返回随机整数
            if ($randNum <= $proCur) {
                $result = $key;
                break;
            } else {
                $proSum -= $proCur;
            }
        }
        unset ($arr);
        return ['code'=>200, 'msg'=>"恭喜您中奖", 'data'=>['prize_id'=>$result]];
    }

}